package com.jcark.mvvm

import android.os.Build
import android.util.Log
import androidx.annotation.RequiresApi
import com.jcark.arch.net.NetConfigManager
import com.jcark.arch.net.RequestErrorCallback
import com.jcark.mvvm.Interceptor.HttpResponseInterceptor
import com.jcark.mvvm.Interceptor.ParamsInterceptor
import me.hgj.mvvm.base.BaseApp
import me.hgj.mvvm.network.interceptor.logging.LogInterceptor

/**
 * 作者　: hegaojian
 * 时间　: 2019/12/23
 * 描述　:
 */

////Application全局的ViewModel，里面存放了一些账户信息，基本配置信息等
////by lazy 是一种属性委托，属性委托关键字是by  lazy 同lateinit 延迟加载赋值
////by lazy 属性必须是val,不可变变量 同java final关键字
////{}内的操作就是返回唯一一次初始化结果
////by lazy可以用于类属性或者局部变量
//val appViewModel: AppViewModel by lazy { App.appViewModelInstance }
//
////Application全局的ViewModel，用于发送全局通知操作
//val eventViewModel: EventViewModel by lazy { App.eventViewModelInstance }

class App : BaseApp() {

    companion object {
        //lateinit 延迟加载 若不加会报错 lateinit 只能修饰类属性，不能修饰局部变量，只能修饰对象，不能修饰基本类型
        lateinit var instance: App
//        lateinit var eventViewModelInstance: EventViewModel
//        lateinit var appViewModelInstance: AppViewModel
    }

    override fun initConfig() {
        NetConfigManager.INSTANCE.init()
            .setBaseUrl("https://yapptest.yiyou.ltd")
            .setAppId("yapp-app-android-001")
            .setIsUseSysUpgradeParam(true)
            .setSysUpgrade(null)
            .setSuccessCode(1)
            .addInterceptor(LogInterceptor())
            .addInterceptor(HttpResponseInterceptor())
            .addInterceptor(ParamsInterceptor.Builder().build())
            .onError(object : RequestErrorCallback {
                override fun onError(code: Int, msg: String) {
                    Log.e("JCArk", "发生错误code=$code  msg=$msg")
                }
            })
            .create()
    }

    @RequiresApi(Build.VERSION_CODES.P)
    override fun onCreate() {
        super.onCreate()
//        MMKV.initialize(this.filesDir.absolutePath + "/mmkv")
        instance = this
//        NetworkApi.INSTANCE.baseUrl = "http://10.10.2.59:8009/yapp-app"
//        NetworkApi.INSTANCE.requestErrorCallback = object : RequestErrorCallback {
//            override fun onError(code: Int, msg: String) {
//                Log.e("JCArk", "发送错误code=$code  msg=$msg")
//            }
//        }


//        eventViewModelInstance = getAppViewModelProvider().get(EventViewModel::class.java)
//        appViewModelInstance = getAppViewModelProvider().get(AppViewModel::class.java)
//        MultiDex.install(this)
//        //界面加载管理 初始化
//        LoadSir.beginBuilder()
//            .addCallback(LoadingCallback())//加载
//            .addCallback(ErrorCallback())//错误
//            .addCallback(EmptyCallback())//空
//            .setDefaultCallback(SuccessCallback::class.java)//设置默认加载状态页
//            .commit()
//        PhotoPick.init(applicationContext, PhotoPickOptionsConfig.getPhotoPickOptions(this));
//        CrashReport.initCrashReport(this, " ad99730c35", BuildConfig.DEBUG);
//        //初始化Bugly
//        val context = applicationContext
//        // 获取当前包名
//        val packageName = context.packageName
//        // 获取当前进程名
//        val processName = getProcessName(android.os.Process.myPid())
//        // 设置是否为上报进程
//        val strategy = CrashReport.UserStrategy(context)
//        strategy.isUploadProcess = processName == null || processName == packageName
//        // 初始化Bugly
//        Bugly.init(context, if (BuildConfig.DEBUG) "xxx" else "a52f2b5ebb", BuildConfig.DEBUG)
//        "".logd()

//        //防止项目崩溃，崩溃后打开错误界面
//        CaocConfig.Builder.create()
//            .backgroundMode(CaocConfig.BACKGROUND_MODE_SILENT) //default: CaocConfig.BACKGROUND_MODE_SHOW_CUSTOM
//            .enabled(true)//是否启用CustomActivityOnCrash崩溃拦截机制 必须启用！不然集成这个库干啥？？？
//            .showErrorDetails(false) //是否必须显示包含错误详细信息的按钮 default: true
//            .showRestartButton(false) //是否必须显示“重新启动应用程序”按钮或“关闭应用程序”按钮default: true
//            .logErrorOnRestart(false) //是否必须重新堆栈堆栈跟踪 default: true
//            .trackActivities(true) //是否必须跟踪用户访问的活动及其生命周期调用 default: false
//            .minTimeBetweenCrashesMs(2000) //应用程序崩溃之间必须经过的时间 default: 3000
//            .restartActivity(WelcomeActivity::class.java) // 重启的activity
//            .errorActivity(ErrorActivity::class.java) //发生错误跳转的activity
//            .apply()
    }
}